// Copyright (C) Kumo inc. and its affiliates.
// Author: Jeff.li lijippy@163.com
// All rights reserved.
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published
// by the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program.  If not, see <https://www.gnu.org/licenses/>.
//


#pragma once

#include <cstdint>
#include <string>

namespace kumo::pollux {
    /// Match the input duration in nanoseconds to the most appropriate unit and
    /// return a string value. Possible units are nanoseconds(ns), microseconds(us),
    /// milliseconds(ms), seconds(s), minutes(m), hours(h), days(d).
    /// The default precision is 2 decimal digits.
    std::string succinctNanos(uint64_t duration, int precision = 2);

    /// Match the input duration in microseconds to the most appropriate unit and
    /// return a string value. Possible returned time units are microseconds(us),
    /// milliseconds(ms), seconds(s), minutes(m), hours(h), days(d). The default
    /// precision is 2 decimal digits.
    std::string succinctMicros(uint64_t duration, int precision = 2);

    /// Match the input duration in milliseconds to the most appropriate unit and
    /// return a string value. Possible units are milliseconds(ms), seconds(s),
    /// minutes(m), hours(h), days(d). The default precision is 2 decimal digits.
    std::string succinctMillis(uint64_t duration, int precision = 2);

    /// Match the input bytes to the most appropriate unit and return a
    /// string value. Possible units are bytes(B), kilobytes(KB),
    /// megabytes(MB), gigabyte(GB), terabytes(TB).
    /// The default precision is 2 decimal digits.
    std::string succinctBytes(uint64_t bytes, int precision = 2);
} // namespace kumo::pollux
